/**
 * 单例模式 (Singleton Pattern)
 * 确保类只能被实例化一次的类
 */
class Singleton {
  /**
   * 构造函数
   * 实现单例模式
   */
  constructor() {
    // TODO: 实现单例模式
    // 提示：确保类只能被实例化一次
  }

  /**
   * 获取单例实例
   * @returns {Singleton} 单例实例
   */
  static getInstance() {
    // TODO: 实现获取单例实例的方法
    // 提示：如果实例不存在则创建，存在则返回现有实例
  }

  /**
   * 获取实例数据
   * @returns {any} 实例数据
   */
  getData() {
    // TODO: 返回实例数据
  }

  /**
   * 设置实例数据
   * @param {any} data - 要设置的数据
   */
  setData(data) {
    // TODO: 设置实例数据
  }
}

/**
 * 懒汉式单例
 * 延迟初始化，只有在第一次调用时才创建实例
 */
class LazySingleton {
  /**
   * 构造函数
   * 实现懒汉式单例
   */
  constructor() {
    // TODO: 实现懒汉式单例
    // 提示：延迟初始化，只有在第一次调用时才创建实例
  }

  /**
   * 获取懒汉式单例实例
   * @returns {LazySingleton} 单例实例
   */
  static getInstance() {
    // TODO: 实现懒汉式获取实例
  }
}

/**
 * 饿汉式单例
 * 在类加载时就创建实例
 */
class EagerSingleton {
  /**
   * 构造函数
   * 实现饿汉式单例
   */
  constructor() {
    // TODO: 实现饿汉式单例
    // 提示：在类加载时就创建实例
  }

  /**
   * 获取饿汉式单例实例
   * @returns {EagerSingleton} 单例实例
   */
  static getInstance() {
    // TODO: 实现饿汉式获取实例
  }
}

module.exports = { Singleton, LazySingleton, EagerSingleton }
